semaphore rw_mutex = 1; // 控制读者和写者互斥访问临界资源
int reader_count = 0;   // 记录有多少读者在访问临界资源
semaphore r_mutex = 1; // 用于控制多个读者互斥的访问全局变量 reader_count 

writer() {  // 写者
    while (true) {
        wait(rw_mutex); // 和读者互斥访问临界资源
        ...;
        writing is performed;
        ...;
        signal(rw_mutex);
    }
}

reader() {  // 读者
    while (true) {
        wait(r_mutex);  // 互斥修改 reader_count
        reader_count++;
        if (reader_count == 1)
            wait(rw_mutex); // 第一个读者和写者互斥访问临界资源
        signal(r_mutex);
        ...;
        reading is performed;
        ...;
        wait(r_mutex);  // 互斥修改 reader_count
        reader_count--;
        if (reader_count == 0)
            signal(rw_mutex); // 最后一个读者释放读写锁
        signal(r_mutex);
    }
}

